/*
 * AdpAPI.cpp
 *
 *  Created on: 30/11/2013
 *      Author: gonzalo
 */

#include "AdpAPI.h"
#include <iosfwd>
#include <iostream>

AdpAPI::AdpAPI(std::string hostName){
	AdminKeys adminIzq(ZONA_IZQ);
	AdminKeys adminMed(ZONA_MED);
	AdminKeys adminDer(ZONA_DER);
	comRobot5 = new middleware::CommunicationRobot5(hostName, middleware::CommunicationRobot5::ADP);
	m_ComADP = new middleware::CommunicationADP(hostName);
	comAGVIzq = new middleware::CommunicationAGV(adminIzq.getAgvKey(),hostName);
	comAGVMed = new middleware::CommunicationAGV(adminMed.getAgvKey(),hostName);
	comAGVDer = new middleware::CommunicationAGV(adminDer.getAgvKey(),hostName);
}

ProductoCantidad AdpAPI::obtenerProductoAProducir() {
	ProductoCantidad oc=m_ComADP->obtenerAProducir();
	return oc;
}

void AdpAPI::pedirCanastos(PedidoPiezas piezas) {
	CLogger::log("Pido canastos al AGV izquierdo.", LogLevelEnum::INFO);
	comAGVIzq->agregarPedidoCanastos(piezas);
	CLogger::log("Pido canastos al AGV del medio.", LogLevelEnum::INFO);
	comAGVMed->agregarPedidoCanastos(piezas);
	CLogger::log("Pido  canastos al AGV derecho.", LogLevelEnum::INFO);
	comAGVDer->agregarPedidoCanastos(piezas);
}

void AdpAPI::enviarAProducir(TipoProducto producto, int cantidad) {
	PedidoProduccion pedido;
	pedido.tipoProducto = producto;
	pedido.cantidad = cantidad;
	CLogger::log("Envio a producir.", LogLevelEnum::INFO);
	comRobot5->enviarAProducir(pedido);
	CLogger::log("Incremento pedidos de producciton a R5", LogLevelEnum::INFO);
	comRobot5->incrementarPedidos(R5_PEDIDOS_PENDIENTES_PROD);
	CLogger::log("Despierto a R5 si es necesario", LogLevelEnum::INFO);
	comRobot5->despertarInteligente();
}

bool AdpAPI::sePuedeEnviarAProducir() {
//	sleep(3);
	return true;
}

AdpAPI::~AdpAPI() {
	delete m_ComADP;
	delete comRobot5;
	delete comAGVIzq;
	delete comAGVMed;
	delete comAGVDer;
}
